// 先改交轴耦合
// 再改配置文件
// 最后修改函数符号

#ifndef IMU_ALGORITHM_V2_0_1INITIAL_H
#define IMU_ALGORITHM_V2_0_1INITIAL_H
#include <cmath>
#include <Eigen/Dense>
#include <string>
#include <yaml-cpp/yaml.h>
#include <iostream>
extern std::string gnss_file;
extern std::string imu_file;
extern std::string save_path;

extern double ARW;      //deg/sqrt(hr) to rad/sqrt(s)
extern double VRW;      //m/sqrt(hr) to m/sqrt(s)
extern double gbStd;    //deg/hr to rad/s
extern double abStd;    // mGal to M/S^2
extern double gsStd;    // ppm to
extern double asStd;    // ppm to 百万分之一
extern double gnStd;    // 陀螺仪交轴耦合???????
extern double gmaStd;    // 陀螺仪安装角
extern double anStd;    // 加速度计交轴耦合??????
extern double amaStd;    // 加速度计安装角
// 4hr to 4 * 3600s
extern double Tgb_reci;
//4hr to 4 * 3600s
extern double Tab_reci;
//4hr to 4 * 3600s
extern double Tgs_reci;
//4hr to 4 * 3600s
extern double Tas_reci;
//Tgn??????
extern double Tgn_reci;
// TgMA
extern double Tgma_reci;
//Tan???????
extern double Tan_reci;
// TaMA
extern double Tama_reci;
//因为速度姿态位置的标准差是会动态变化的
extern double pos_n_std_init;
extern double pos_e_std_init;
extern double pos_d_std_init;
extern double vel_n_std_init;
extern double vel_e_std_init;
extern double vel_d_std_init;
extern double att_n_std_init;
extern double att_e_std_init;
extern double att_d_std_init;
//杆臂
extern Eigen::Vector3d l2b;
// 初始 pva
extern double init_roll;
extern double init_pitch;
extern double init_heading;
extern double init_v_n;
extern double init_v_e;
extern double init_v_d;
extern double init_latitude;
extern double init_longitude;
extern double init_height;
extern double init_time;
//T_imu
extern double T_imu;

// 矩阵的维数
extern int n;
// 矩阵那些量需要关掉
extern int switch_off[24];

// 中断开始时间（相对时间）
extern int inter_start_time[3];
// 中断周期
extern int inter_circle;
// 中断持续时间
extern int inter_length;
// 中断打开
extern bool gnss_inter; // 默认打开

enum GyroNonMode{gyro_up_triangle, gyro_down_triangle};
enum AccelNonMode{accel_up_triangle, accel_down_triangle};
enum ProjectMode{project2gyro, project2accel, noproject};
extern GyroNonMode gyro_non_mode;
extern AccelNonMode accel_non_mode;
extern ProjectMode project_mode;

// 最开始的imu误差
extern Eigen::Vector<double, 24> init_imu_error;
// 最开始的P阵标准差
extern double std_Dev[33];
// 初始化q阵

// 初始化一些必要的参数必须要在函数里面
extern bool LoadConfig(std::string config_file);
extern std::string GetSaveFilePrefix(std::string start_time);
#endif //IMU_ALGORITHM_V2_0_1INITIAL_H
